package com.java.huxb.utils;

import com.google.common.util.concurrent.ThreadFactoryBuilder;

import java.util.concurrent.*;

/**
 * @author huxb
 * @date 2020/4/9 0009 下午 3:22
 */
public class ThreadUtils {
    private static ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("my-pool-%d").build();
    /**
     19      * corePoolSize    线程池核心池的大小
     20      * maximumPoolSize 线程池中允许的最大线程数量
     21      * keepAliveTime   当线程数大于核心时，此为终止前多余的空闲线程等待新任务的最长时间
     22      * unit            keepAliveTime 的时间单位
     23      * workQueue       用来储存等待执行任务的队列
     24      * threadFactory   创建线程的工厂类
     25      * handler         拒绝策略类,当线程池数量达到上线并且workQueue队列长度达到上限时就需要对到来的任务做拒绝处理
     26      */
     private static ExecutorService service = new ThreadPoolExecutor(
                         4,
                         40,
                         10L,
                         TimeUnit.MILLISECONDS,
                         new LinkedBlockingQueue<>(1024),
                         namedThreadFactory,
                         new ThreadPoolExecutor.AbortPolicy()
                 );
    /**
     46      * 使用线程池创建线程并异步执行任务
     47      * @param r 任务
     48      */
    public static void execute(Runnable r) {
        service.execute(r);
    }

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {

            ThreadUtils.execute(() ->{
                System.out.println(Thread.currentThread().getName());
            });
        }
    }
}
